﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using blacksoft.Models;
using System.Security.Cryptography;
using System.Text;


namespace blacksoft.Controllers
{
    public class ValidarLoginController : Controller
    {
        private inf245travelbusEntities db = new inf245travelbusEntities();
        public ActionResult Index()
        {
            if (Session["IDUsuario"] != null)
                {
                    return RedirectToAction("Index", "MainPageEmployes"); 
                }
            return View();
        }
        [HttpPost]
        public ActionResult Index([Bind(Include = "Nombre,Contraseña")] LoginModel user)
        {
            if (!ModelState.IsValid)
                {
                    if (Session["NombreUsuario"] != null)
                        {
                            TempData["CAxhAJO"] = "ODIO_LA_12207";
                        }
                    return View();
                }
            var query = from p in db.Usuario
                        where p.Nombre.Equals(user.Nombre)
                        select new
                        {
                            p.IDUsuario,
                            p.Nombre,
                            p.Contraseña,
                            p.IDPerfil,
                            p.IDPersona
                        };
            if (query.Any())
            {
                using (MD5 md5Hash = MD5.Create())
                {
                    string hash = GetMd5Hash(md5Hash, user.Contraseña);
                    if (query.First().Contraseña.Equals(hash))
                    {
                        // INI DATOS NECESARIO PARA EL MENU Y SEGURIDAD
                        Persona persona = db.Persona.Find(query.First().IDPersona);
                        if (persona.Estado.Equals("AN") || persona.Estado.Equals("IN"))
                            {
                                TempData["estasGGeado"] = "Su permiso de Ingreso a sido suspendido";
                                return RedirectToAction("Index"); 
                            }
                        Session["Session_CodigoPersona"] = persona.IDPersona;
                        Session["NombreUsuario"] = persona.Nombre+" "+persona.ApellidoPaterno;
                        Session["IDUsuario"] = query.First().IDUsuario;
                        Session["Permisos"] = (int)db.Perfil.Find(query.First().IDPerfil).permisos;
                        Session["Contraseña"] = query.First().Contraseña;
                        Session["IDTerminal"] = persona.IDTerminal;
                        Session["UnidadDeVenta"] = persona.IDUnidadVenta;
                        // FIN DATOS NECESARIO PARA EL MENU Y SEGURIDAD
                        /*{//PERMISOS 
                            var query2 = from p in db.Permiso_x_Perfil
                                         join pr in db.Permiso on p.IDPermiso equals pr.IDPermiso
                                         where p.IDPerfil.Equals(query.First().IDPerfil)
                                         select new
                                         {
                                             pr.IDPermiso,
                                             pr.Controlador,
                                             pr.Vista
                                         };
                            if (query2.Any())
                            {
                                List<string> ListaPermisos = new List<string>();
                                foreach (var permiso in query2)// TODOS LOS PERMISOS DEL USUARIO
                                {
                                    ListaPermisos.Add(permiso.IDPermiso.ToString());
                                    ListaPermisos.Add(permiso.Controlador);
                                    ListaPermisos.Add(permiso.Vista);
                                }
                                Session["PermisosUsuario"] = ListaPermisos;
                            }
                        }*/

                        TempData["ESTOYLOGUEADO"] = "Sea usted BienVenido al sistema " +(string)Session["NombreUsuario"];
                        return View();
                    }
                    TempData["alertMessage"] = "Contraseña Invalida, vuelva a intentarlo";
                    return View();//CONTRACEÑA ERRADA
                }
            }
            else
            {
                TempData["alertMessage"] = "Usuario Invalido, vuelva a intentarlo";
                return View();//USUARIO NO EXISTE
            }

        }
        public ActionResult Logout()
        {
            Session.Abandon();
            return RedirectToAction("Index", "INT_Principal");
            
        }

        public static string GetMd5Hash(MD5 md5Hash, string input)
        {

            // Convert the input string to a byte array and compute the hash.
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string.
            return sBuilder.ToString();
        }



    }
}